perm filename PLAY.FAI[LK,LCS] blob
sn#088112 filedate 1974-12-31 generic text, type T, neo UTF8
00100 TITLE BUFFER; DOROTHY BENDER ****** GARPLY *******
00200
00300 ; ROUTINE TO READ THE OUTPUT FROM THE MUSIC
00400 ; PROGRAM AND CALL THE D-A CONVERTER TO PLAY.
00500 ;
00600 ; THE NAME OF THE FILE TO BE INPUTTED IS 'MUSIC',
00900
01000 A ← 1 ;WORK
01100 B ← 2 ;WORK
01200 RET ← 3 ;RETURN ACCUMULATOR
01300 BUFSIZ ←=2048
01400 ↓DSKCHN ←1 ;DISK CHANNEL FOR INPUT
01500 ↓ADCHN ←2 ;D-A CHANNEL FOR OUTPUT
01600
01700 OPDEF READCH [51B8]
01800 OPDEF MESSAGE[51B8!3B12]
01900
02000 BEG: CALLI 0,0 ;RESET I/O DEVICES
02100 OPEN DSKCHN,[17 ;MODE
02200 'DSK ' ;DEVICE NAME
02300 0] ;NO BUFFER HEADERS
02400 HALT BEG ;RESTART IF DEVICE IS UNAVAILABLE
02500
02600 SETZM FILBLK+3 ;FOR RESTART
02650 SETZM FILBL2+3 ;FOR RESTART
02700 ;;LX: MESSAGE [ASCIZ/
02800 ;; TYPE `P' TO PLAY FROM DISK
02900 ;;/]
03000 ;; readch a
03300 ;; caie a,"P"
03400 ;; jrst lx
03500 ;; skipe filblk+3 ;is this first time through ?
03600 ;; jrst pla2 ;No. Parameters already set up.
03700 ;FIND OUT NUMBER OF CHANNELS AND
03800 ;THE SPEED.
03900
04000 MESSAGE [ASCIZ/HOW MANY CHANNELS? /]
04100 READCH A
04200 SUBI A,"0"+1 ;CONVERT TO BINR AND ADD 1
04300 DPB A,[POINT 2,OUTBIT,26]
04400
04500 MESSAGE [ASCIZ/ WHAT IS THE SPEED? /]
04600 READCH A
04700 SUBI A,"0"
04800 DPB A,[POINT 3,OUTBIT,32]
04805
04810 LX: MESSAGE [ASCIZ/
04825 TYPE `P' TO PLAY FROM DISK
04840 /]
04855 readch a
04870 caie a,"P"
04885 jrst lx
04900
05000 PLA2: SETZM FILBLK+3
05050 SETZM FILBL2+3
05100 LOOKUP DSKCHN,FILBLK
05120 SKIPA ;CAN'T FIND MUSIC.MUS
05140 JRST XOPEN ;FOUND IT
05160 LOOKUP DSKCHN,FILBL2 ;TRY FOR MUSAA.DMD
05200
05300 JRST [MESSAGE[ASCIZ/
05400 *** MUSIC FILE NOT FOUND/]
05500 CALLI 12]
05600 ;EXIT IF FILE IS MISSING
05650 MOVE A,FILBL2+3 ;GET LENGTH OF MUSAA.DMD
05675 MOVEM A,FILBLK+3;PUT IT IN RIGHT PLACE
05700
05710 XOPEN: MOVSI 'XGP' ;DOWN TO XGPOK FOR XGP CONFLICT.
05720 DEVUSE 0,
05730 HLRZ 0,0
05740 CAIN 400000
05750 JRST XGPOK
05760 INIT 16,17
05770 SIXBIT .XGP.
05780 0
05790 JRA 16,2(16)
05800 XGPOK: OPEN ADCHN,[117 ;MODE
05900 'AD ' ;DEVICE NAME
06000 0] ;NO BUFFER HEADERS
06100
06200 JRST [MESSAGE[ASCIZ/
06300 ***D-A NOT AVAILABLE/]
06400 CALLI 12]
06500 ;EXIT IF D-A IS UNAVAILABLE
06600
06700 SPWAR: SPCWAR 17,[CALLI]
06800 MESSAGE [ASCIZ/ GO? /]
06900 READCH A
07000
07100
07200 LNTH: movs a,filblk+3 ;get length of file.
07300 movnm a,nwd
07400
07500 ; -----------------------------------------
07600
07700 ;BEGIN MAIN BODY OF PROGRAM
07800
07900 LOOP: JSP RET,SUB ;ROUTINE TO READ AND WRITE
08000 BUF1-1 ;USE BUF1 FOR THE I/O
08100 JUMPLE B,OUT ;DONE
08200
08300 JSP RET,SUB ;CALL IT AGAIN
08400 BUF2-1 ;USE BUF2 FOR THE I/O
08500 JUMPG B,LOOP ;GO BACK FOR MORE IF B>0
08600
08700 OUT: close dskchn, ;END OF PROGRAM.
08800 releas adchn,
08850 RELEASE 16,
08900 SPCWAR 0,'SSW'
09000 jrst lx
09100
09200 ;SUBROUTINE TO SET UP IOWD AND READ AND WRITE.
09300 ; 1(RET) WILL BE THE RETURN
09400 ; 0(RET) WILL BE THE ADDRESS OF THE BUFFER TO BE
09500 ; PUT IN THE RIGHT HALF OF THE IOWD.
09600 ; A WILL BE A WORK REGISTER
09700 ; B WILL BE TESTED ON THE OUTSIDE.
09800
09900 SUB: MOVNI A,BUFSIZ ;PICK UP AND COMPLEMENT BUFSIZ
10000 ADDB A,NWD ;A←NWD-BUFSIZ
10100 ;NWD←NWD-BUFSIZ
10200 MOVE B,A ;SAVE B TO BE TESTED FOR LAST
10300 ;TIME.
10400 JUMPL A,LAST ;SET UP FOR LAST TIME.
10500 MOVEI A,0
10600
10700 ;THE IOWD LOOKS LIKE:
10800 ; [-BUFSIZ / BUFI-1]
10900
11000 LAST: ADDI A,BUFSIZ
11100 MOVNS A ;COMPLEMENT A
11200 HRL A,0(RET) ;PICK UP BUFI AND MOVE IT
11300 ;TO THE LEFT SIDE OF A.
11400 MOVSM A,INLIST ;SWAP A AND MOVE IT.
11500 MOVSM A,OUTWC ;SAME FOR OUTPUT.
11600 INPUT DSKCHN,INLIST ;READ A RECORD.
11700 OUTPUT ADCHN,OUTWC ;WRITE THE RECORD.
11800 JRST 1(RET) ;RETURN
11900
12000 ; -----------------------------------------
12100
12200 ; STORAGE:
12300
12400 NWD: 0 ;FOR NUMBER OF WORDS OF INPUT.
12500 ↓BUF1: BLOCK BUFSIZ+1 ;BUFFER 1
12600 BUF2: BLOCK BUFSIZ+1 ;BUFFER 2
12700
12800 FILBLK: 'MUSIC ' ;FILENAME FOR INPUT
12900 'MUS ' ;EXTENSION
13000 0 ;INFORMATION ON FILE
13100 0 ;PROJECT PROG#
13200
13210 FILBL2: 'MUSAA ' ;FILENAME FOR INPUT, 2ND CHOICE
13228 'DMD ' ;EXTENSION
13246 0 ;INFORMATION ON FILE
13264 0 ;PROJECT PROG#
13282
13300 CLIST: IOWD 1,NWD ;FOR THE FIRST RECORD
13400 0
13500
13600 INLIST: 0 ;WILL CONTAIN AN IOWD
13700 0
13800
13900 OUTWC: 0 ;WILL CONTAIN AN IOWD FOR D-A
14000 3650 ;MAGIC BITS FOR 136.
14100 OUTBIT: 4000 ;BITS FOR D-A
14200 BLOCK 2
14300
18000 end beg